package ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.combobox;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.Item;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.comparators.ResumenGestorOrganizacionComparator;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.etiquetas.EtiquetaBeanProperty;
import ar.uba.fi.taller2.cmmiassistant.persistencia.GestorOrganizacion;
import ar.uba.fi.taller2.cmmiassistant.persistencia.PersistenciaException;

public class ComboBoxModelGestoresOrganizacion extends ComboBoxModelAdapter {

    private List<GestorOrganizacion> gestores = new ArrayList<GestorOrganizacion>();

    public ComboBoxModelGestoresOrganizacion() {

    }

    public void setControlador(Controlador controlador) {

        super.setControlador(controlador);
        this.cambio(null);
    }

    protected void actualizarItems() {

        try {

            this.getItems().clear();
            this.gestores = this.getControlador().getModelo()
                    .getServicioPersistencia().buscarOrganizaciones();

            Collections.sort(this.getGestoresOrganizacion(),
                    ResumenGestorOrganizacionComparator.instance());

            for (GestorOrganizacion gestor : this.getGestoresOrganizacion()) {

                Item item = new Item(
                        new EtiquetaBeanProperty(gestor, "resumen"));

                this.getItems().add(item);
            }

        } catch (PersistenciaException error) {

            throw new IllegalStateException("Error buscando organizacion", error);
        }
    }

    public List<GestorOrganizacion> getGestoresOrganizacion() {

        return this.gestores;
    }

    public GestorOrganizacion getGestorOrganizacion(int index) {

        return index >= 0 ? this.getGestoresOrganizacion().get(index) : null;
    }

    public int indexOf(GestorOrganizacion gestor) {

        return this.getGestoresOrganizacion().indexOf(gestor);
    }
}
